package com.cg.design.graphicdesignpattern.memento.game;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 表示Gamer（主人公）状态的类
 *
 * @program: LeetCode->Memento
 * @description: 表示Gamer（主人公）状态的类
 * @author: cg
 * @create: 2022-04-01 09:03
 **/
public class Memento implements Serializable {

    /**
     * 表示主人公现在所持有的金钱数目
     */
    int money;

    /**
     * 表示现在为止所获得的水果
     */
    ArrayList<String> fruits;

    /**
     * 构造函数非public，为default，即只有在同一包下的其他类才能调用Memento的构造函数
     *
     * @param money
     */
    Memento(int money) {
        this.money = money;
        this.fruits = new ArrayList<>();
    }

    /**
     * 获取主人公当前所持有的金钱数目
     *
     * @return
     */
    public int getMoney() {
        return money;
    }

    /**
     * 添加水果
     * 该方法非public，为default，无法从其他包下改变Memento内部的状态
     *
     * @param fruit
     */
    void addFruit(String fruit) {
        fruits.add(fruit);
    }

    /**
     * 获取当前所持有的所有的水果
     * 该方法非public，为default，无法从其他包下改变Memento内部的状态
     *
     * @return
     */
    List<String> getFruits() {
        return (List<String>) fruits.clone();
    }
}
